package cn.mesmile.workflow.process.service;

import cn.mesmile.workflow.commom.Query;
import cn.mesmile.workflow.process.bo.OperationTaskBO;
import cn.mesmile.workflow.process.qo.WorkFlowAdminQO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.task.api.Task;

/**
 * @author zb
 * @Description 流程运维相关接口
 */
public interface WorkFlowAdminService {

    /**
     *  查询所有待办的任务
     * @param query  分页参数
     * @param workFlowAdminQO 查询参数
     * @return
     */
    IPage<Task> listAllTodoTask(Query query, WorkFlowAdminQO workFlowAdminQO);

    /**
     *  催办任务，发送通知消息
     * @param operationTaskBO
     */
    void urgeTask(OperationTaskBO operationTaskBO);

    /**
     *  转办任务
     * @param operationTaskBO
     */
    void transferTask(OperationTaskBO operationTaskBO);

    /**
     *  委托任务
     * @param operationTaskBO
     */
    void delegateTask(OperationTaskBO operationTaskBO);

    /**
     *  终止任务，即终止流程 跳转到任务结束点
     * @param operationTaskBO
     */
    void terminationTask(OperationTaskBO operationTaskBO);

    /**
     * 加签任务
     * @param operationTaskBO
     */
    void addMultiInstance(OperationTaskBO operationTaskBO);

    /**
     *  减签任务
     * @param operationTaskBO
     */
    void deleteMultiInstance(OperationTaskBO operationTaskBO);

    /**
     *  回退任务到指定节点
     * @param operationTaskBO
     */
    void rollbackTask(OperationTaskBO operationTaskBO);

    /**
     *  查询所有已经完成的流程实例
     * @param query
     * @param workFlowAdminQO
     * @return
     */
    IPage<HistoricProcessInstance> listAllDoneTask(Query query, WorkFlowAdminQO workFlowAdminQO);
}
